//用于从json生成java类. json配置能力有限, 在数据部分提取比较重要的参数, 具体策略写在函数里边
{
    "basic":{
        //基本信息, 要求保存的数据数据可以向高版本更新, 甚至向低版本兼容, 类声明中保留版本号
        "name": "斗地主",
        "version": "1",
        "type": "Poker",
        "player_num": 3,
    },
    
    "rule" : {
        //概况配置
        "decks": 1,
        "jokers": true,
        //分组方式
        "team": "ByGame",   //None-无, PreGame-第一局之前弹出对话框随机分组或由房主决定, PreRound-每一局随机分配或由房主决定, ByGame-和None类似, 此外添加小队标注功能(ABCDE五个)
        //牌堆类型 用于界面配置和默认的可见性配置
        "common_piles": [{"地主牌": {"visibility": "Vary"}}], //除摸牌区外的公共牌堆
        "private_piles": [],   //除手牌外的私有牌堆 一个叫xx的牌堆, 仅自己可见("None","Self","Team","All","Vary") {xx(name)" : {"visibility": "Self"}}
        //牌型大小, 用牌型语言表示 用于: 部分判断出牌的合法性(能大过前面的牌), 给AI提供牌型分割API, 给人当前可出牌的提示(js代码)
        "pattern": {
            // "测试":    "#3a<=A++(#2+=) & #2+_1+=[b].A+++(#2==) & c.[A] & $.A#(_1+_2) @_1*15+a | #4a & #2$#2",
            "单张":       "a                              @a",
            "对子":       "#2a                            @a",
            "三张":       "#3a                            @a",
            "三带一":      "#3a & $                        @a",
            "三带对*":     "#3a & #2$                      @a",
            "四带二*":     "#4a & $#2                      @a",
            "四带两对*":    "#4a & #2$#2                   @a :_1",
            "单顺":       "a<=A++(#5+=)                   @a :_1",
            "双顺":       "#2a<=A++(#3+=)                 @a :_1",
            "三顺":       "#3a<=A++(#2+=)                 @a :_1",
            "单翅膀飞机":    "#3a<=A++(#2+=) & $#_1         @a :_1",
            "双翅膀飞机":    "#3 a<=A ++ (#2+=) & #2 $ #_1  @a :_1",
            "炸弹":       "#4a                             @a",
            "王炸":       "Joker & joker                   "
        },
        
        "order": {
            "min": 3,
            "hasse": [["`others`", "炸弹", "王炸"]],    //引入`others`伪记号, 表示除了当前列表中该记号后面的牌型之外的牌型, 不仅为了方便, 还可以提高运行效率
        }, //可以采用多种描述方式, 如这里的"min", 还有直接使用1-15的数字列表, 均采用显示和值分离处理的方式, 运行效率相同
        
        //游戏阶段, 仅指明调用方法的名字, 在java代码里声明相应的无参abstract方法, 继承这个游戏类之后实现这些方法
        "game": [""]
    },
    
    "ai":{
        "weight" : "sum / hands - residual * 100000000000000000000000000000000000000000000000000000.0",
    },
    
    "ui" : {
        
    }
}